home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / gamtlk11.zip / source.zip / CARIBBEAN POKER / CPOKER.HPP < prev    next >
C/C++ Source or Header  |  1999-12-10  |  7KB  |  207 lines

  1. //
  2. // File: CPoker.HPP
  3. //
  4. // Caribbean Poker header file.
  5. //
  6. #include <iframe.hpp>
  7. #include <imenubar.hpp>
  8. #include <idrawcv.hpp>
  9. #include <iprofile.hpp>
  10. #include <icolor.hpp>
  11. #include <icmdhdr.hpp>
  12. #include <isizehdr.hpp>
  13. #include <ipushbut.hpp>
  14. #include <igraphbt.hpp>
  15. #include <ireslib.hpp>
  16. #include <imsgbox.hpp>
  17. #include <icheckbx.hpp>
  18. #include <ispinnum.hpp>
  19. #include <itimer.hpp>
  20. #include <istattxt.hpp>
  21.  
  22. #include <string.h>
  23. #include <stdlib.h>
  24.  
  25. #include "CPoker.H"
  26. #include "CGTK.H"
  27.  
  28. #define  DEF_PROFILE "Gambler.INI"
  29. #define  DECK_LIB    "STANDARD"
  30. #define  MIN_WAGER   5
  31. #define  MAX_WAGER   100
  32. #define  DEF_BANK    0
  33. #define  DEF_JACKPOT 10000
  34. #define  HANDSIZE    5
  35. #define  DEF_BUYIN   100
  36. #define  JACKPOT_INCREMENT    0.10
  37. #define  NUM_DRAWABLE   2
  38.  
  39. class CPOKER;
  40.  
  41. class ACommandHandler: public ICommandHandler
  42. {
  43.   public:
  44.  
  45.     ACommandHandler(CPOKER *helloFrame);
  46.     virtual ~ACommandHandler();
  47.  
  48.   protected:
  49.  
  50.     virtual bool command(ICommandEvent& cmdEvent);
  51.     virtual bool systemCommand(ICommandEvent& cmdEvent);
  52.  
  53.   private:
  54.     CPOKER *frame;
  55. };
  56.  
  57. class AResizeHandler : public IResizeHandler
  58. {
  59.    friend class CPOKER;
  60.    public:
  61.       AResizeHandler(CPOKER *Frame);
  62.       virtual  ~AResizeHandler() {};
  63.  
  64.    protected:
  65.  
  66.       virtual bool windowResize(IResizeEvent& resizeEvent);
  67.  
  68.    private:
  69.       CPOKER    *frame;
  70. };
  71.  
  72.  
  73. class PROFILE: public IProfile
  74. {
  75.    friend class CPOKER;
  76.  
  77.    public:
  78.       PROFILE(const char filename[]=DEF_PROFILE);
  79.       ~PROFILE();
  80.       unsigned long game() {return (Preferences & CARIBBEAN_DRAW)?IDM_DRAW:IDM_STUD;};
  81.       bool  isAuto() {return Preferences & AUTO_PROGRESSIVE;};
  82.       enum  {CARIBBEAN_DRAW=1, AUTO_PROGRESSIVE=2};
  83.    protected:
  84.       IPoint   Position;
  85.       ISize    Size, DesktopSize;
  86.       IColor   Foreground, Background;
  87.       unsigned long  Wager;
  88.       double    Bank, Jackpot;
  89.       char     fileName[256];
  90.       unsigned long Preferences;
  91.       unsigned long Speed;
  92. };
  93.  
  94. class CARD
  95. {
  96.    public:
  97.       CARD(const char value=0) {Value=value;};
  98.       virtual ~CARD() {};
  99.       char  Value;
  100.       bool  IsValid() {return Value<DECKSIZE;};
  101.       enum  {INVALID=0xFF};
  102.       char  faceOf() {return Value>>2;};
  103.       char  suitOf() {return Value & 0x03;};
  104.       enum  {CLUB=0x00, DIAMOND=0x01, HEART=0x02, SPADE=0x03};
  105.       enum  {TWO=0x00, THREE=0x01, FOUR=0x02, FIVE=0x03, SIX=0x04, SEVEN=0x05, EIGHT=0x06, NINE=0x07, TEN=0x08, JACK=0x09, QUEEN=0x0A, KING=0x0B, ACE=0x0C};
  106. };
  107.  
  108. class HAND
  109. {
  110.    public:
  111.       HAND(CPOKER* Frame, unsigned long ButtonBase);
  112.       virtual ~HAND() {int Temp; for(Temp=0;Temp<HANDSIZE;Temp++) delete cardButton[Temp];};
  113.       bool resize(ISize newSize, IPoint newPosition);
  114.       bool erase();
  115.       char addCard(CARD ThisCard);
  116.       char Size() {return NumCards;};
  117.       unsigned long evaluate();
  118.       unsigned long value() {return Value;};
  119.       void fold() {Value=0;};
  120.       bool discard(int Marked) {int Temp; for(Temp=0;Temp<HANDSIZE;Temp++) if(Marked & (1<<Temp)){Card[Temp]=CARD::INVALID; cardButton[Temp]->setGraphic(frame->MainDeck.cardBack()); NumCards--;} return true;};
  121.       int marked() {return markedCards;};
  122.       int numMarked()   {int Temp, Temp2; for(Temp=0, Temp2=0;Temp2<HANDSIZE;Temp2++) if(cardMarked(Temp2)) Temp++; return Temp;};
  123.       bool toggleMark(int markNum) {return cardMarked(markNum)?unmarkCard(markNum):markCard(markNum);};
  124.       bool cardMarked(int markNum) {return markedCards & (1<<markNum);};
  125.       bool markCard(int markNum) {markedCards|=1<<markNum; cardButton[markNum]->setGraphic(frame->MainDeck.cardBack()); return true;};
  126.       bool unmarkCard(int markNum) {markedCards&=~(1<<markNum); cardButton[markNum]->setGraphic(frame->MainDeck.cardFace(Card[markNum])); return true;};
  127.       bool operator>(HAND& TestHand) {return Value>TestHand.Value;};
  128.       bool operator==(HAND& TestHand) {return Value==TestHand.Value;};
  129.       enum {NOTHING=0, ACE_KING=1, PAIR=2, TWO_PAIR=3, THREE_OF_A_KIND=4, STRAIGHT=5, FLUSH=6, FULL_HOUSE=7, FOUR_OF_A_KIND=8, STRAIGHT_FLUSH=9, ROYAL_FLUSH=10};
  130.    protected:
  131.       CARD  Card[HANDSIZE];
  132.       IGraphicPushButton   *cardButton[HANDSIZE];
  133.       IStaticText Name;
  134.       unsigned long Value, cardXSize, cardYSize;
  135.       char  NumCards;
  136.       char  markedCards;
  137.       CPOKER   *frame;
  138. };
  139.  
  140. class DECK : public IDynamicLinkLibrary
  141. {
  142.    public:
  143.       DECK(const char LibName[]=DECK_LIB);
  144.       ~DECK() {};
  145. //      IResourceId cardBack(int Back=0) {return IResourceId(BACK_INDEX+Back, *this);};
  146. //      IResourceId cardFace(CARD& ThisCard) {return IResourceId(ThisCard.Value+FACE_INDEX, *this);};
  147.       IBitmapHandle  cardBack(int ThisBack=0) {return Back;};
  148.       IBitmapHandle  cardFace(CARD& ThisCard) {return Face[ThisCard.Value];};
  149.       void shuffle() {memset(Cards, ~0, sizeof(Cards));};
  150.       bool In(CARD& TestCard) {return Cards[TestCard.Value];};
  151.       CARD  draw() {CARD TempCard; do {TempCard=CARD(DECKSIZE*rand()/RAND_MAX);}while(!TempCard.IsValid() || !In(TempCard)); Cards[TempCard.Value]=0; return TempCard;};
  152.    private:
  153.       bool  Cards[DECKSIZE];
  154.       IBitmapHandle  Face[DECKSIZE];
  155.       IBitmapHandle  Back;
  156. };
  157.  
  158. class ANIMATE : public ITimerFn
  159. {
  160.    public:
  161.       ANIMATE(CPOKER *Frame) : frame(Frame) {};
  162.       virtual void timerExpired(unsigned long timer) {frame->clockTick();};
  163.    private:
  164.       CPOKER   *frame;
  165. };
  166.  
  167. class CPOKER : public IFrameWindow
  168. {
  169.    public:
  170.       friend class ACommandHandler;
  171.       CPOKER(unsigned long WindowID);
  172.       virtual ~CPOKER();
  173.       bool sizeClient(IResizeEvent& resizeEvent);
  174.       bool selectGame(unsigned long Game);
  175.       DECK  MainDeck;
  176.       bool deal();
  177.       bool draw() {return bet();};
  178.       bool bet();
  179.       bool fold();
  180.       void saveProfile();
  181.       bool updateBank();
  182.       bool updateJackpot();
  183.       bool removeIvory();
  184.       bool addIvory();
  185.       bool takeIvory();
  186.       float payPlayer();
  187.       float payJackpot();
  188.       bool clockTick();
  189.       bool addMoney() {Profile.Bank+=DEF_BUYIN; updateBank(); return true;};
  190.       bool cashOut() {Profile.Bank=0; updateBank(); return true;};
  191.       enum {DONE=0, DEAL=1, DRAW=2, BET=3, FOLD=4, DMARK=10, DDRAW=16};
  192.    private:
  193.       IPushButton    betButton, foldButton;
  194.       IGraphicPushButton progressiveButton, betField;
  195.       IBitmapHandle  betBitmap, anteBitmap, emptyBitmap, progfullBitmap, progemptyBitmap;
  196.       ICheckBox      autoButton;
  197.       INumericSpinButton   wager;
  198.       HAND  PlayerHand, DealerHand;
  199.       IStaticText    bank, jackpot, payout;
  200.       bool  ivoryChip;
  201.       char  State;
  202.       IDrawingCanvas drawCanvas;
  203.       PROFILE  Profile;
  204.       ACommandHandler   commandHandler;
  205.       AResizeHandler resizeHandler;
  206.       ITimer   animationTimer;
  207. };